home *** CD-ROM | disk | FTP | other *** search
/ com!online 2005 May / com_0505_1.iso / opensource / top10 / amc_install.exe / {app} / Scripts / FilmAffinity (ES).ifs < prev    next >
Encoding:
Text File  |  2004-12-04  |  9.9 KB  |  331 lines

  1. // GETINFO SCRIPTING
  2. // FilmAffinity v1.0 by aviloria
  3.  
  4. (***************************************************
  5.  *  Author: aviloria   (aviloria@yahoo.com)        *
  6.  *  Script for the importation of pictures from    *
  7.  *  http://www.filmaffinity.com                    *
  8.  *                                                 *
  9.  *  For use with Ant Movie Catalog 3.4.0           *
  10.  *  www.antp.be/software/moviecatalog              *
  11.  *                                                 *
  12.  *  The source code of the script can be used in   *
  13.  *  another program only if full credits to        *
  14.  *  script author and a link to Ant Movie Catalog  *
  15.  *  website are given in the About box or in       *
  16.  *  the documentation of the program               *
  17.  ***************************************************)
  18.  
  19.  
  20. program FilmAffinity;
  21.  
  22. const
  23.   SearchBaseURL = 'http://www.filmaffinity.com/es/res.php?stext=';
  24.   SearchPostFix = '&stype=all';
  25.   BaseURL1 = 'http://www.filmaffinity.com/es/';
  26.   BaseURL2 = 'http://www.filmaffinity.com';
  27.  
  28. var
  29.   MovieName: string;
  30.   MovieURL: string;
  31. //------------------------------------------------------------------------------------
  32.  
  33. function FindLine(Pattern: string; List: TStringList; StartAt: Integer): Integer;
  34. var
  35.   i: Integer;
  36. begin
  37.   Result := -1;
  38.   if StartAt < 0 then
  39.     StartAt := 0;
  40.   for i := StartAt to List.Count-1 do
  41.     if Pos(Pattern, List.GetString(i)) <> 0 then
  42.     begin
  43.       Result := i;
  44.       Break;
  45.     end;
  46. end;
  47. //------------------------------------------------------------------------------------
  48.  
  49. function TextBetween(var S: string; StartTag: string; EndTag: string): string;
  50. var
  51.   InitialPos: Integer;
  52. begin
  53.   InitialPos := Pos(StartTag, S);
  54.   Delete(S, 1, InitialPos + Length(StartTag) - 1);
  55.   InitialPos := Pos(EndTag, S);
  56.   result := copy(S, 1, InitialPos - 1);
  57.   Delete(S, 1, InitialPos + 1);
  58. end;
  59. //------------------------------------------------------------------------------------
  60.  
  61. procedure AnalyzePage(Address: string);
  62. var
  63.   Page: TStringList;
  64.   LineNr: Integer;
  65.   Line: string;
  66.   MovieTitle, MovieAddress: string;
  67.  
  68. begin
  69.   Page := TStringList.Create;
  70.   Page.Text := GetPage(Address);
  71.   if Pos('<title>FilmAffinity', Page.Text) = 0 then
  72.   begin
  73.     ShowMessage('No se ha podido establecer la conexion.');
  74.   end else
  75.   begin
  76.     LineNr := FindLine('<td class="tt1" align="center">Resultados por Título</td>', Page, 0);
  77.     LineNr := LineNr + 7;
  78.     Line := Page.GetString(LineNr);
  79.     if Pos ('No se han encontrado coincidencias', Line) <> 0 then
  80.     begin
  81.       ShowMessage('No se han encontrado resultados para "' + MovieName + '"');
  82.     end else
  83.     begin
  84.       PickTreeClear;
  85.       Line := TextBetween (Line, '<b>', '</b>');
  86.       PickTreeAdd('Encontrados ' + Line + ' resultados para "' + MovieName + '"', '');
  87.  
  88.       LineNr := LineNr + 9;
  89.       Line := Page.GetString(LineNr);
  90.       repeat
  91.         MovieAddress := TextBetween (Line, '<a href="', '">');
  92.         MovieTitle := TextBetween (Line, '<span class="ntext">', '</span>');
  93.         HTMLDecode(Movietitle);
  94.         PickTreeAdd(MovieTitle, BaseURL1 + MovieAddress);
  95.         LineNr := LineNr + 3;
  96.         Line := Page.GetString(LineNr);
  97.       until Pos('</ol>', Line) > 0;
  98.  
  99.       if PickTreeExec(Address) then
  100.         AnalyzeMoviePage(Address);
  101.     end;
  102.   end;
  103.   Page.Free;
  104. end;
  105. //------------------------------------------------------------------------------------
  106.  
  107. procedure AnalyzeMoviePage(Address: string);
  108. var
  109.   Page: TStringList;
  110.   LineNr, aux: Integer;
  111.   Line: string;
  112.   Item: string;
  113.   Comments: string;
  114.   Actors: string;
  115.   Description: string;
  116.  
  117. begin
  118.   Comments := '';
  119.   Actors := '';
  120.   Description := '';
  121.  
  122.   // URL
  123.   SetField(fieldURL, Address);
  124.  
  125.   Page := TStringList.Create;
  126.   Page.Text := GetPage(Address);
  127.  
  128.   // Translated Title
  129.   LineNr := FindLine('<td align="center" class="tt1">', Page, 0);
  130.   Line := Page.GetString(LineNr);
  131.   Item := TextBetween (Line, '<td align="center" class="tt1">', ' <img src=');
  132.   HTMLDecode(Item);
  133.   SetField(fieldTranslatedTitle, Trim (Item));
  134.  
  135.   LineNr := LineNr + 8;
  136.   Line := Page.GetString(LineNr);
  137.  
  138.   // Original Title
  139.   if Pos ('TITULO ORIGINAL', Line) > 0 then
  140.   begin
  141.     LineNr := LineNr + 1;
  142.     Line := Page.GetString(LineNr);
  143.     Item := TextBetween (Line, '<td class="ntext">', '</td>');
  144.     HTMLDecode(Item);
  145.     SetField(fieldOriginalTitle, Trim (Item));
  146.     LineNr := LineNr + 1;
  147.     Line := Page.GetString(LineNr);
  148.   end;
  149.  
  150.   // Picture
  151.   if Pos ('owned by Studio', Line) > 0 then
  152.   begin
  153.     Item := TextBetween (Line, '<img src="', '" >');
  154.     GetPicture (BaseURL2 + Item, False);
  155.     LineNr := LineNr + 3;
  156.     Line := Page.GetString(LineNr);
  157.   end;
  158.  
  159.   // Year
  160.   if Pos ('AÑO', Line) > 0 then
  161.   begin
  162.     LineNr := LineNr + 1;
  163.     Line := Page.GetString(LineNr);
  164.     Item := TextBetween (Line, '<td class="ntext">', '</td>');
  165.     HTMLDecode(Item);
  166.     SetField(fieldYear, Trim (Item));
  167.     LineNr := LineNr + 3;
  168.     Line := Page.GetString(LineNr);
  169.   end;
  170.  
  171.   // Length
  172.   if Pos ('DURACIÓN', Line) > 0 then
  173.   begin
  174.     LineNr := LineNr + 1;
  175.     Line := Page.GetString(LineNr);
  176.     Item := TextBetween (Line, '<td class="ntext">', '</td>');
  177.     HTMLDecode(Item);
  178.     aux := Pos (' min', Item);
  179.     if aux > 0 then
  180.       Delete (Item, aux, aux + 3);
  181.     SetField(fieldLength, Trim (Item));
  182.     LineNr := LineNr + 3;
  183.     Line := Page.GetString(LineNr);
  184.   end;
  185.  
  186.   // Country
  187.   if Pos ('PAÍS', Line) > 0 then
  188.   begin
  189.     LineNr := LineNr + 1;
  190.     Line := Page.GetString(LineNr);
  191.     Item := TextBetween (Line, 'alt="', '">');
  192.     HTMLDecode(Item);
  193.     SetField(fieldCountry, Trim (Item));
  194.     LineNr := LineNr + 3;
  195.     Line := Page.GetString(LineNr);
  196.   end;
  197.  
  198.   // Director
  199.   if Pos ('DIRECTOR', Line) > 0 then
  200.   begin
  201.     LineNr := LineNr + 1;
  202.     Line := Page.GetString(LineNr);
  203.     Item := TextBetween (Line, '&stype=dir">', '</a>');
  204.     HTMLDecode(Item);
  205.     SetField(fieldDirector, Trim (Item));
  206.     LineNr := LineNr + 3;
  207.     Line := Page.GetString(LineNr);
  208.   end;
  209.  
  210.   // Script writer
  211.   if Pos ('GUIÓN', Line) > 0 then
  212.   begin
  213.     LineNr := LineNr + 1;
  214.     Line := Page.GetString(LineNr);
  215.     Item := TextBetween (Line, '<td class="ntext">', '</td>');
  216.     Comments := Comments + 'Guión: ' + Item + #13#10;
  217.     LineNr := LineNr + 3;
  218.     Line := Page.GetString(LineNr);
  219.   end;
  220.  
  221.   // Musician
  222.   if Pos ('MUSICA', Line) > 0 then
  223.   begin
  224.     LineNr := LineNr + 1;
  225.     Line := Page.GetString(LineNr);
  226.     Item := TextBetween (Line, '<td class="ntext" >', '</td>');
  227.     Comments := Comments + 'Música: ' + Item + #13#10;
  228.     LineNr := LineNr + 3;
  229.     Line := Page.GetString(LineNr);
  230.   end;
  231.  
  232.   // Photography
  233.   if Pos ('FOTOGRAFÍA', Line) > 0 then
  234.   begin
  235.     LineNr := LineNr + 1;
  236.     Line := Page.GetString(LineNr);
  237.     Item := TextBetween (Line, '<td class="ntext" >', '</td>');
  238.     Comments := Comments + 'Fotografía: ' + Item + #13#10;
  239.     LineNr := LineNr + 3;
  240.     Line := Page.GetString(LineNr);
  241.   end;
  242.  
  243.   // Actors
  244.   if Pos ('REPARTO', Line) > 0 then
  245.   begin
  246.     LineNr := LineNr + 1;
  247.     Line := Page.GetString(LineNr);
  248.     Actors := Actors + TextBetween (Line, '&stype=rep">', '</a>') + #13#10;
  249.     while Pos ('&stype=rep"> ', Line) > 0 do
  250.       Actors := Actors + TextBetween (Line, '&stype=rep"> ', '</a>') + #13#10;
  251.     LineNr := LineNr + 3;
  252.     Line := Page.GetString(LineNr);
  253.   end;
  254.  
  255.   // Productor
  256.   if Pos ('PRODUCTORA', Line) > 0 then
  257.   begin
  258.     LineNr := LineNr + 1;
  259.     Line := Page.GetString(LineNr);
  260.     Comments := Comments + 'Productora: ' + TextBetween (Line, '<td class="ntext" colspan="2">', '</td>') + #13#10;
  261.     LineNr := LineNr + 3;
  262.     Line := Page.GetString(LineNr);
  263.   end;
  264.    
  265.   // Genere & Critic
  266.   if Pos ('GÉNERO Y CRÍTICA', Line) > 0 then
  267.   begin
  268.     Line := Copy (Page.Text, 1, Length (Page.Text));
  269.     Line := StringReplace(Line, '<br />', #13#10);
  270.     Line := TextBetween (Line, 'GÉNERO Y CRÍTICA', '</tr>');
  271.     Description := TextBetween (Line, '<td class="ntext" colspan="2">', '</td>');
  272.     LineNr := FindLine('WEB OFICIAL', Page, LineNr);
  273.     Line := Page.GetString(LineNr);
  274.   end;
  275.  
  276.   // Official Webpage
  277.   if Pos ('WEB OFICIAL', Line) > 0 then
  278.   begin
  279.     LineNr := LineNr + 1;
  280.     Line := Page.GetString(LineNr);
  281.     Comments := Comments + 'Web oficial: ' + TextBetween (Line, '<a href="', '" target="_blank">') + #13#10;
  282.     LineNr := LineNr + 3;
  283.     Line := Page.GetString(LineNr);
  284.   end;
  285.  
  286.   // Rating
  287.   if Pos ('PUNTUACIÓN MEDIA', Line) > 0 then
  288.   begin
  289.     LineNr := LineNr + 1;
  290.     Line := Page.GetString(LineNr);
  291.     Item := TextBetween (Line, '<b>', '</b>');
  292.     HTMLDecode(Item);
  293.     if Length(Item) = 3 then
  294.     begin
  295.       Item := IntToStr(Round(StrToInt(StrGet(Item, 1), 0) + (StrToInt(StrGet(Item, 3), 0) / 10)));
  296.     end else
  297.     begin
  298.       Item := IntToStr(Round(StrToInt(StrGet(Item, 1), 0)));
  299.     end;
  300.     SetField(fieldRating, Item);
  301.     LineNr := LineNr + 3;
  302.     Line := Page.GetString(LineNr);
  303.   end;
  304.  
  305.   HTMLDecode(Comments);
  306.   SetField(fieldComments, Comments);
  307.   HTMLDecode(Actors);
  308.   SetField(fieldActors, Actors);
  309.   HTMLDecode(Description);
  310.   SetField(fieldDescription, Description);
  311.  
  312.   DisplayResults;
  313. end;
  314. //------------------------------------------------------------------------------------
  315. //------------------------------------------------------------------------------------
  316.  
  317. begin
  318.   if CheckVersion(3,4,0) then
  319.   begin
  320.     MovieName := GetField(fieldOriginalTitle);
  321.     if MovieName = '' then
  322.       MovieName := GetField(fieldTranslatedTitle);
  323.     if Input('Importar de FilmAffinity', 'Introduzca el titulo de la pelicula:', MovieName) then
  324.     begin
  325.       AnalyzePage(SearchBaseURL + UrlEncode(MovieName) + SearchPostfix);
  326.     end;
  327.   end
  328.   else
  329.     ShowMessage('Este script requiere una version mas reciente de Ant Movie Catalog (por lo menos la version 3.4.0)');
  330. end.
  331.